Invoke data set Mode from package mlogit. To do this you need to first load the package. This is a data set with choices about mode of transportation. This is done as follows:
data("Mode")
Once you have loaded the data set, answer the following questions: Describe this data set. How many variables are there and of which type (i.e., categorical/quantitative)?
glimpse(Mode)
## Rows: 453
## Columns: 9
## $ choice <fct> car, rail, car, car, car, car, car, car, bus, car, rail, …
## $ cost.car <dbl> 1.5070097, 6.0569985, 5.7946769, 1.8691439, 2.4989523, 4.…
## $ cost.carpool <dbl> 2.3356118, 2.8969191, 2.1374543, 2.5724266, 1.7220099, 0.…
## $ cost.bus <dbl> 1.800512, 2.237128, 2.576385, 1.903518, 2.686000, 1.84765…
## $ cost.rail <dbl> 2.358920, 1.855450, 2.747479, 2.268276, 2.973866, 2.31005…
## $ time.car <dbl> 18.503200, 31.311107, 22.547429, 26.090282, 4.699140, 3.0…
## $ time.carpool <dbl> 26.338233, 34.256956, 23.255171, 29.896023, 12.414084, 9.…
## $ time.bus <dbl> 20.86779, 67.18189, 63.30906, 19.75270, 43.09204, 12.8256…
## $ time.rail <dbl> 30.03347, 60.29313, 49.17164, 13.47268, 39.74325, 43.5442…
How many different modes of transportation are in this data set? What is the most popular mode? What is the least popular mode?
summary(Mode)
## choice cost.car cost.carpool cost.bus
## car :218 Min. :0.4099 Min. :0.1293 Min. :1.013
## carpool: 32 1st Qu.:3.6964 1st Qu.:0.9519 1st Qu.:1.783
## bus : 81 Median :4.8796 Median :1.6665 Median :2.027
## rail :122 Mean :4.8735 Mean :1.6863 Mean :2.036
## 3rd Qu.:6.2255 3rd Qu.:2.4581 3rd Qu.:2.321
## Max. :8.8555 Max. :3.2953 Max. :2.740
## cost.rail time.car time.carpool time.bus
## Min. :1.272 Min. : 2.404 Min. : 8.385 Min. : 1.969
## 1st Qu.:1.947 1st Qu.:21.835 1st Qu.:28.391 1st Qu.:25.457
## Median :2.198 Median :37.497 Median :40.637 Median :41.415
## Mean :2.212 Mean :37.044 Mean :39.771 Mean :39.923
## 3rd Qu.:2.476 3rd Qu.:53.104 3rd Qu.:51.843 3rd Qu.:52.805
## Max. :3.113 Max. :66.871 Max. :65.009 Max. :75.681
## time.rail
## Min. : 4.621
## 1st Qu.:28.143
## Median :40.034
## Mean :39.505
## 3rd Qu.:49.172
## Max. :73.998
ggplot(Mode)+
geom_bar(aes(choice, fill=choice), color="black", show.legend = FALSE)+
theme_bw()
In general, what is the most expensive mode? The least expensive?
ggplot(Mode)+
geom_density(aes(cost.car, fill="car"), color="black", alpha=0.5)+
geom_density(aes(cost.carpool , fill="carpool"), color="black", alpha=0.5)+
geom_density(aes(cost.bus, fill="bus"), color="black", alpha=0.5)+
geom_density(aes(cost.rail, fill="rail"), color="black", alpha=0.5)+
scale_fill_manual(values=c("car"= "firebrick", "carpool"="dodgerblue", "bus"="darkgoldenrod2", "rail"="cyan"), name="Mode")+
xlab("Cost")+
theme_bw()
Create a plot showing the univariate distributions of time by car and time by bus. Discuss.
grafica_time <- ggplot(Mode)+
geom_density(aes(time.car, fill="car"), color="black", alpha=0.5)+
geom_density(aes(time.carpool , fill="carpool"), color="black", alpha=0.5)+
geom_density(aes(time.bus, fill="bus"), color="black", alpha=0.5)+
geom_density(aes(time.rail, fill="rail"), color="black", alpha=0.5)+
scale_fill_manual(values=c("car"= "firebrick", "carpool"="dodgerblue", "bus"="darkgoldenrod2", "rail"="cyan"), name="Mode")+
xlab("Time")+
theme_bw()
ggplotly(grafica_time)
How do choices relate to cost by the different modes?
varnum <- Mode |> dplyr::select(where(is.numeric))
varnum <- names(varnum)
for (var in varnum) {
grafica_box <- ggplot(Mode)+
geom_boxplot(aes(choice, eval(as.name(var)), fill=choice), show.legend=FALSE)+
ylab(var)+
theme_bw()
print(grafica_box)
}
Importacion de datos
# Read a csv file data and name the object
mc_mode_choice <- read_csv(system.file("extdata", "mc_commute.csv", package = "discrtr"), show_col_types = FALSE)
head(mc_mode_choice)
## # A tibble: 6 × 39
## RespondentID choice avcycle avwalk avhsr avcar timecycle timewalk accesshsr
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 566872636 3 0 1 1 0 6.21 21.3 3
## 2 566873140 3 0 1 1 1 3.73 12.8 4
## 3 566874266 3 0 0 1 1 100000 100000 3
## 4 566874842 2 1 1 1 0 5.83 20 10.7
## 5 566881170 2 1 1 1 0 5.83 20 6.21
## 6 566907438 2 0 1 1 0 100000 10 7.14
## # ℹ 30 more variables: waitingtimehsr <dbl>, transfer <dbl>, timehsr <dbl>,
## # timecar <dbl>, parking <dbl>, vehind <dbl>, owncycle <dbl>, gender <dbl>,
## # work <dbl>, visa <dbl>, age <dbl>, solo <dbl>, shared <dbl>, family <dbl>,
## # child <dbl>, primary_caregiver <dbl>, LAT <dbl>, LONG <dbl>, DAUID <dbl>,
## # mhi <dbl>, dwell_den <dbl>, lum <dbl>, st_den <dbl>, inter_den <dbl>,
## # SF_P_ratio <dbl>, side_den <dbl>, Shelters_SD <dbl>, Shelters_D <dbl>,
## # Shelters_A <dbl>, Shelters_SA <dbl>
También es conveniente mostrar las variables (y su respectiva clase)
glimpse(mc_mode_choice)
## Rows: 1,376
## Columns: 39
## $ RespondentID <dbl> 566872636, 566873140, 566874266, 566874842, 56688117…
## $ choice <dbl> 3, 3, 3, 2, 2, 2, 2, 3, 3, 2, 2, 4, 2, 2, 3, 2, 4, 3…
## $ avcycle <dbl> 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ avwalk <dbl> 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1…
## $ avhsr <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ avcar <dbl> 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0…
## $ timecycle <dbl> 6.211180e+00, 3.726708e+00, 1.000000e+05, 5.828157e+…
## $ timewalk <dbl> 21.31439, 12.78863, 100000.00000, 20.00000, 20.00000…
## $ accesshsr <dbl> 3.00, 4.00, 3.00, 10.66, 6.21, 7.14, 10.66, 15.00, 2…
## $ waitingtimehsr <dbl> 15.00, 15.00, 2.00, 10.23, 10.23, 10.23, 10.23, 3.00…
## $ transfer <dbl> 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 0e+00, 1e+…
## $ timehsr <dbl> 5, 10, 15, 8, 5, 3, 20, 25, 8, 5, 5, 25, 2, 3, 25, 5…
## $ timecar <dbl> 100000, 2, 4, 100000, 100000, 100000, 5, 17, 4, 1000…
## $ parking <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0…
## $ vehind <dbl> 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0…
## $ owncycle <dbl> 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0…
## $ gender <dbl> 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0…
## $ work <dbl> 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0…
## $ visa <dbl> 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
## $ age <dbl> 21, 23, 20, 20, 19, 19, 49, 19, 20, 23, 25, 38, 20, …
## $ solo <dbl> 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ shared <dbl> 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0…
## $ family <dbl> 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1…
## $ child <dbl> 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1…
## $ primary_caregiver <dbl> 1e+05, 1e+05, 0e+00, 1e+05, 1e+05, 1e+05, 1e+00, 0e+…
## $ LAT <dbl> 43.26302, 43.25885, 43.25222, 43.25782, 43.25562, 43…
## $ LONG <dbl> -79.90074, -79.90476, -79.93953, -79.91941, -79.9204…
## $ DAUID <dbl> 35250503, 35250675, 35250964, 35250669, 35250669, 35…
## $ mhi <dbl> 3.3902, 4.5770, 6.3081, 5.4911, 5.4911, 9.8697, 6.30…
## $ dwell_den <dbl> 941.3980, 1688.5725, 534.6675, 892.1744, 892.1744, 3…
## $ lum <dbl> 0.805636, 0.280830, 0.455743, 0.479460, 0.479460, 0.…
## $ st_den <dbl> 14.376206, 19.497536, 13.556608, 14.307826, 14.30782…
## $ inter_den <dbl> 39.224916, 109.529025, 15.276213, 45.883253, 45.8832…
## $ SF_P_ratio <dbl> 0.230931, 0.356169, 0.074477, 0.268249, 0.268249, 0.…
## $ side_den <dbl> 22.633222, 39.640032, 8.228497, 37.457574, 37.457574…
## $ Shelters_SD <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ Shelters_D <dbl> 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1…
## $ Shelters_A <dbl> 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0…
## $ Shelters_SA <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
Clase de datos en R
mc_mode_choice$choice[1]-mc_mode_choice$choice[4]
## [1] 1
Convercion de una variable a un factor
mc_mode_choice$choice <- factor(mc_mode_choice$choice,
labels = c("Cycle", "Walk", "HSR", "Car"))
summary(mc_mode_choice$choice)
## Cycle Walk HSR Car
## 48 711 336 281
Duracion en un viaje en bicicleta
summary(mc_mode_choice$timecycle)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.29 3.79 5.83 34014.86 100000.00 100000.00
Duracion Promedio de un viaje en bicicleta
time.Active.clean <- mc_mode_choice |> dplyr::select(timecycle, timewalk) |>
filter(timecycle!=100000 & timewalk!=100000)
summary(time.Active.clean)
## timecycle timewalk
## Min. : 0.2914 Min. : 1.00
## 1st Qu.: 2.9141 1st Qu.:10.00
## Median : 4.3711 Median :15.00
## Mean : 4.5852 Mean :16.10
## 3rd Qu.: 5.8282 3rd Qu.:20.00
## Max. :17.4845 Max. :62.11
costo/duracion de un ir caminando o en bicleta
ggplot(data = time.Active.clean) +
geom_area(aes(x = timecycle), stat = "bin", binwidth = 5, fill = "blue", color = "black", alpha = 0.6) +
geom_area(aes(x = timewalk), stat = "bin", binwidth = 5, fill = "yellow", color = "black", alpha = 0.6) +
xlab("Tiempo (minutos)")
La densidad de acera está medida en km/km^2 A continuación crearemos el
diagrama de caja. Comenzamos definiendo un objeto ggplot2, en este caso,
queremos trazar la variable categórica en el eje x y la variable
cuantitativa en el eje y:
mc_mode_choice |> select(c("choice", "side_den")) |> summary()
## choice side_den
## Cycle: 48 Min. : 0.00
## Walk :711 1st Qu.:18.19
## HSR :336 Median :22.63
## Car :281 Mean :24.18
## 3rd Qu.:35.70
## Max. :59.41
ggplot(mc_mode_choice)+
geom_boxplot(aes(choice, side_den))
Hay 4 variables que es carro, caminar, compartir el carro y tren, de las cuales se hicieron 39 entrevistas
Son 4 diferentes y el mas popular es compartir el carro y el menos popular es el tren
El mas caro es el carro y el menos caro es el camion
grafica_time <- ggplot(Mode)+
geom_density(aes(time.car, fill="car"), color="black", alpha=0.5)+
geom_density(aes(time.bus, fill="bus"), color="black", alpha=0.5)+
scale_fill_manual(values=c("car"= "firebrick", "bus"="darkgoldenrod2"), name="Mode")+
xlab("Time")+
theme_bw()
ggplotly(grafica_time)
El mas caro es viajar en carro, se debe al uso de la gasolina , ademas de ser el menos denso El segundo mas caro es compartir carro, porque aunque la gasolina se puede dividie entre varias personas aun es mayor que los anteriores el tren y el camion son muy similares, tienden a tener un precio mas accesible que el carro .
En este trabajo se realizó una exploración inicial de datos relacionados con las elecciones de modo de transporte, utilizando los paquetes mlogit, discrtr y herramientas de visualización como ggplot2 y plotly en R. A partir del análisis del conjunto de datos Mode, se identificaron las variables disponibles, su tipo (categóricas y cuantitativas), y se estudió la popularidad de las opciones de transporte, así como sus costos y tiempos asociados.
Los resultados mostraron diferencias claras en los costos y tiempos entre los distintos modos de transporte, siendo el automóvil generalmente más costoso, mientras que modos como el autobús o el tren resultaron más accesibles económicamente. Los análisis gráficos, como las densidades y diagramas de caja, permitieron visualizar la distribución de variables clave y cómo se relacionan con la elección de transporte.
Posteriormente, se trabajó con otro conjunto de datos (mc_commute.csv) para profundizar en el análisis de variables como la duración promedio de viajes en bicicleta y a pie, la distribución del tiempo de viaje, y la densidad de acera en diferentes modos de transporte. La conversión adecuada de variables categóricas y la limpieza de datos atípicos (como valores extremadamente altos) fueron pasos esenciales para lograr un análisis más preciso.
En conjunto, este ejercicio permitió familiarizarse con el manejo de datos en R, la visualización efectiva y la interpretación de patrones de comportamiento de transporte, sentando bases importantes para estudios posteriores de análisis de elección discreta y modelado estadístico más avanzado.